sparkSQL 时间和视图处理

上周利用spark sql统计mysql数据库中数据然后导入mysql的报表库中,遇到了一些时间处理的问题,记录一下mysql和spark sql处理不同。

最近30天处理

在spark sql中处理:

1
date_sub(now(),30) <=create_time

在mysql处理:

1
DATE_SUB(CURDATE(), INTERVAL 30 DAY) <=create_time

时间相差几天

在spark sql处理(和mysql一直):

1
datediff(start_time,end_time)<1(天数)

相差多少分钟

在spark sql先把两个时间转换时间戳,然后再除以60.利用unix_timestamp函数进行处理,下面是转换为秒

1
unix_timestamp(a.depart_time)-unix_timestamp(a.enter_time)

转换为年月日

在spark sql用date_format进行处理,注意想要####-##-##模式,格式一定要y-MM-dd,这样用时间排序才没有问题,如果是y-M-d,出现的日期格式,排序会有问题

1
DATE_FORMAT(create_time, 'y-MM-dd')

spark的视图

spark的视图创建非常方面,一般使用createOrReplaceTempView方法,创建视图,比如可以这样使用

1
2
spark.sql("select * from 
A where deleted=0").createOrReplaceTempView("a_view")

利用视图可以把复杂嵌套的sql分解一个个视图,最后得到想要的结果

注意:视图不能全部数字,会报错。视图如果被使用过,需要重新创建。